/*
    C++简述：
    1、与c语言一样，c++也是在贝尔实验室诞生的，Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)在20世纪80年代在这里开发了这种语言。
    2、c++融合了3种不同的编程方式:
        (1)c语言代表的过程性语言。 (2)c++在c语言基础上添加的类代表的面向对象语言。 (3)c++模板支持的泛型编程。
    3、C++和C语言的关系:
       c++语言是在C语言的基础上，添加了"面向对象"、"模板"等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上，还是从运算符的数量和使用上，
       都非常相似，所以我们常常将这两门语言统称为"C/C++"。
       C语言和C++并不是对立的竞争关系：
        ·C++是C语言的加强，是一种更好的C语言。
        ·C++是以C语言为基础的，并且完全兼容C语言的特性。
       C语言和C++语言的学习是可以相互促进的。学好C语言，可以为进一步地学习C++语言打好基础，而C++语言的学习，也会促进我们对于C语言的理解，从而更好地运用C语言。

 */

//在c语言中头文件使用扩展名.h将其作为一种通过名称标识文件类型的简单方式。而在c++中用法改变了，c++的头文件没有扩展名。
#include <iostream> //预编译指令，引入头文件iostream
//当然，c++作为c的扩展，也全面兼容使用原来的c语言的头文件语法定义
#include <stdio.h>
//部分c语言的头文件在c++被重新命名，舍去了扩展名.h(使之成为c++风格头文件)，并在文件名称前面加上前缀c(表明来自c语言)。
//当然你写成string.h也没有什么问题
#include <cstring>

using namespace std; //使用std命名空间

int main() {
    //这些是C语言版本的用法（C语言的函数都基本有保留）
    printf("Hello World!\n");
    char arr[] = "Hello ";
    printf(strcat(arr, "World!\n"));

    //这些是C++版本的用法
    //namespace是指标识符的各种可见范围。命名空间用关键字 namespace 来定义。命名空间是C++的一种机制，用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。
    // 比如该std就是命名空间的名字。命名空间的作用是为了解决日益严重的名称冲突问题。随着可重用代码的增多，各种不同的代码体系中的标识符之间同名的情况就会显著增多。
    // 解决的办法就是将不同的代码库放到不同的名字空间中。（比如项目中需要定义两个同名的函数func，并且使得它们能够被其他文件都访问得到）
    std::cout << "Hello, World!" << std::endl; //解析:使用处于命名空间std中的cout函数和endl函数。
    // cout是c++中的标准输出流(相当于printf)，endl是输出换行(\n)并刷新缓冲区。
    cout << "Hello, World!" << endl; //当通过using namespace直接进行了声明的前提下，可以不通过::来调用。

    //新的数据类型:
    // 在C语言中，条件通过返回0或者非0来表示逻辑真或逻辑假，这种语法的可读性比较差，不了解的人阅读起来会比较困难
    int num = 4 > 3;
    cout << num << endl;
    // C++新增bool类型，该类型专门用来存储逻辑真或者逻辑假
    bool isTrue = 4 > 3;
    cout << isTrue << endl;
    // 本质: 就是一个只占一个字节的数值类型，并且只存储0和1
    cout << sizeof(bool) << endl;
    // bool有两种值:true和false
    isTrue = true;
    isTrue = false;
    //可以看到这个true和false本质上就是0和1
    cout << true << endl;
    cout << false << endl;

    https://blog.csdn.net/Jack_zhangpengfei/article/details/114011458
    return 0;
}
